package com.itfenghuang.lambda;

/**
 * Lamda
 */
public class A01_Lambda {
    public static void main(String[] args) {
        /**
         * 1.概述
         *      lambda: 简化开发
         * 2.标准格式
         *  1).(形式参数)->{要完成的功能}
         *      (形式参数):如果没有参数,为空,如果有多个参数,中间用逗号隔开
         *      ->指向动作 是一种固定的写法
         *      {}:代码块 代码写在大括号中
         *  2).lambda表达式三要素: () -> {} 形式参数,箭头,代码块
         *  3).写法:
         *      1).接口中的方法无参数无返回值
         *      2).有参有返回值
         *      3).无参有返回值
         *      4).有参有返回值
         *  4).省略规则
         *      1.参数类型可以省略,如果有多个参数,不能只省略其中一部分参数类型
         *      2.如果参数有且仅有一个,那么小括号可以省略
         *      3.如果代码块只有一条语句,可以省略大括号,分号,return关键字
         *  5).Lambda表发式使用前期条件
         *      1).使用lambda表达式,必须要有接口
         *      2).接口有且仅有一个抽象方法
         *  6).在开发中山门地方才会用到lambda表达式?
         *      匿名内部类中,方法的实际参数
         *
         *      明天
         *      集合中的Stream流
         */
        //匿名内部类
//        new Inter(){
//            @Override
//            public void print() {
//                System.out.println("打印一条语句");
//            }
//        }.print();

//        getInter(new Inter() {
//            @Override
//            public void print() {
//                System.out.println("天青色等烟雨,而我在等你");
//            }
//        });

        //接口中的方法无参数无返回值
//        getInter(()->{ System.out.println("淦,好难写"); });
        //有参有返回值
//        getInter1(new Inter1() {
//            @Override
//            public void print(String name) {
//                System.out.println(name);
//            }
//        });
        getInter1(name->{
            System.out.println(name);
        });
        //无参有返回值
        getInter2(new Inter2() {
            @Override
            public String print() {
                return "滚";
            }
        });
        getInter2(()->{
            return "口你急哇";
        });
        //有参有返回值
        getInter3((a,b)->a+b);
    }
    public static void getInter(Inter inter){
        inter.print();
    }
    public static void getInter1(Inter1 inter){
        inter.print("短短短短短");
    }
    public static void getInter2(Inter2 inter){
        String print = inter.print();
        System.out.println(print);
    }
    public static void getInter3(Inter3 inter){
        int print = inter.print(1,2);
        System.out.println(print);
    }
}
interface Inter{
    void print();
}
interface Inter1{
    void print(String name);
}
interface Inter2{
    String print();
}
interface Inter3{
    int print(int a,int b);
}